<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <!-- 导入页面的基本样式 -->
    <link rel="stylesheet" href="./css/search.css" />
    <!-- 导入 jQuery -->
    <script src="./lib/jquery.js"></script>
</head>

<body>
    <div class="container">
        <!-- Logo -->
        <img src="./images/taobao_logo.png" alt="" class="logo" />

        <div class="box">
            <!-- tab 栏 -->
            <div class="tabs">
                <div class="tab-active">宝贝</div>
                <div>店铺</div>
            </div>

            <!-- 搜索区域（搜索框和搜索按钮） -->
            <div class="search-box">
                <input id="ipt" type="text" class="ipt" placeholder="请输入要搜索的内容" />
                <button class="btnSearch">搜索</button>
            </div>

            <!-- 搜索建议列表 -->
            <div id="suggest-list"></div>
        </div>
    </div>

    <script>
        // 1. 给输入框添加keyup事件
        // 2. 获取输入框的内容
        // 3. 判断输入框的内容是否存在，如果没有内容，不执行后续代码
        // 4. 如果有内容，发送ajax请求
        // 5. 在回调函数中，生成页面并显示
        // 6. 防抖
        //   6.1 定义 timer=null
        //   6.2 开启定时器，定时器内发送ajax请求
        //   6.3 设置触发keyup事件，先清除上一个定时器

        // 7. 缓存
        //   7.1 定义一个缓存容器
        //   7.2 每次获取到当前数据时，将当前数据存入当前缓存
        //   7.3 开启定时器前，先判断当前缓存是否存在；存在，就返回当前缓存；不存在，就发送ajax请求


        $(function() {
            //   6.1 定义 timer=null
            var timer = null

            //   7.1 定义一个缓存容器
            var cache = {}

            // 1. 给输入框添加keyup事件
            $('#ipt').on('keyup', function() {
                //   6.3 设置触发keyup事件，先清除上一个定时器
                clearTimeout(timer)

                // 2. 获取输入框的内容
                var keyword = $(this).val().trim()

                // 3. 判断输入框的内容是否存在，如果没有内容，不执行后续代码
                if (keyword.length <= 0) {
                    return
                }

                //   7.3 开启定时器前，先判断当前缓存是否存在；存在，就使用当前缓存生成页面；不存在，就发送ajax请求
                if (cache[keyword]) {
                    return renderHtml(cache[keyword])
                }

                //   6.2 开启定时器，定时器内发送ajax请求
                timer = setTimeout(function() {
                    // 4. 如果有内容，发送ajax请求
                    getList(keyword)
                }, 500)


            })

            // 发送ajax请求方法
            function getList(kw) {
                $.ajax({
                    url: `https://suggest.taobao.com/sug?q=${kw}`,
                    dataType: 'jsonp',
                    success: function(res) {
                        // console.log(res)

                        //   7.2 每次获取到当前数据时，将当前数据存入当前缓存
                        cache[kw] = res

                        // 5. 在回调函数中，生成页面并显示
                        renderHtml(res)
                    }
                })
            }

            // 生成页面并显示方法
            function renderHtml(res) {
                var html = ''
                $.each(res.result, function(index, item) {
                    html += `
                            <div class="suggest-item">${item[0]}</div>
                            `

                    // console.log(html)
                    $('#suggest-list').append(html).show()
                })
            }
        })
    </script>
</body>

</html>